package com.zzyl.service;

import com.zzyl.base.PageResponse;
import com.zzyl.dto.ReservationDto;
import com.zzyl.vo.ReservationCountVo;
import com.zzyl.vo.ReservationVo;

import java.util.List;

/**
 * 用于管理预订信息的接口。
 */
public interface ReservationService {

    /**
     * 分页查询预订信息。
     *
     * @return 返回一个包含所有预订信息的列表。
     */
    PageResponse<ReservationVo> findAllReservationsByPages(Integer pageNum, Integer pageSize, String status);

    /**
     * 根据预订ID查找预订信息。
     *
     * @param id 预订的唯一标识符。
     * @return 返回匹配的预订信息，如果没有找到则返回null。
     */
    ReservationVo findReservationById(Long id);

    /**
     * 添加一个新的预订。
     *
     * @param reservation 包含新预订信息的DTO对象。
     */
    void addReservation(ReservationDto reservation);

    /**
     * 更新一个现有的预订。
     *
     * @param reservation 包含更新后预订信息的DTO对象。
     */
    void updateReservation(ReservationDto reservation);

    /**
     * 根据预订ID修改一个预订的状态。
     *
     * @param id
     */
    void cancelReservationById(Long id);

    /**
     * 获取已取消的预订数量。
     *
     * @return 返回已取消的预订数量。
     */
    Long getCancelledCount();
    /**
     * 查询每个时间段剩余预约次数
     *
     * @param time
     * @return
     */
    List<ReservationCountVo> countByTime(Long time);

    /**
     * 定时任务：取消超时预约
     */
    void overdueReservation();
}

